package org.finesys.ai.vo;

import cn.idev.excel.annotation.ExcelIgnore;
import cn.idev.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import org.finesys.common.excel.annotaion.DictTypeProperty;
import org.finesys.common.excel.annotaion.ExcelLine;

import java.io.Serializable;

/**
 * 提示词表
 */
@Data
@Accessors(chain = true)
public class AigcModelExcelVO implements Serializable {

    /**
     * 导入时候回显行号
     */
    @ExcelLine
    @ExcelIgnore
    private Long lineNum;

    /**
     * 模型ID
     */
    @ExcelProperty("模型ID")
    private String id;

    /**
     * 名称
     */
    @ExcelProperty("模型别名")
    private String name;
    /**
     * 模型名称
     */
    @ExcelProperty("模型名称")
    private String modelName;
    /**
     * 模型类型:Chat、Embedding、Image
     */
    @ExcelProperty("模型类型")
    @DictTypeProperty("LLM_MODEL_TYPE")
    private String modelType;
    /**
     * 模型版本
     */
    @ExcelProperty("模型版本")
    private String modelVersion;

    /**
     * 模型提供者
     */
    @ExcelProperty("模型供应商")
    private String provider;
    /**
     * 模型描述
     */
    @ExcelProperty("模型描述")
    private String remark;
    /**
     * 模型访问地址
     */
    @ExcelProperty("模型访问地址")
    private String baseUrl;

    /**
     * 响应长度
     */
    @ExcelProperty("响应长度")
    private Integer responseLimit;
    /**
     * 温度
     * 接近 0	高度确定，聚焦高频词	合同撰写、代码生成
     * 0.5~1.0	平衡确定性与多样性	常规问答、内容摘要
     * >1.0	强随机性，创造性显著提升	诗歌、故事创作
     */
    @ExcelProperty("温度")
    private Double temperature = 0.2;

    // 以下是Gemini特有的参数
    /**
     * 作用：从概率累计达到p的的那一组词中随机选择下一个词。与Top-K不同，Top-P是动态的，依据每个上下文的不同而变化。
     * 常见设置：通常设置在0.8到0.95之间。较低的topP值（如0.8）使生成的文本更加可预测和相关，而较高的值（如0.95）增加了文本的多样性和创造性。
     * 0.1~0.3	高度确定性，聚焦高频词	代码生成、技术文档
     * 0.5~0.7	平衡质量与多样性	常规问答、内容摘要
     * 0.8~0.95	强创造性，允许低频词	诗歌创作、广告文案
     */
    @ExcelProperty("Top-P")
    private Double topP = 0.0;
    /**
     * 作用：只从模型认为最可能的N个词中选择下一个词。值越大，选择范围越广，生成的文本越多样；值越小，选择范围越窄，生成的文本越趋向于高概率的词。
     * 常见设置：一般设置在40到100之间。较小的K值可以提高文本的相关性和连贯性，而较大的值可以增加文本的多样性和创造性。
     */
    @ExcelProperty("Top-K")
    private Double topK = 0.0;

    /**
     * 端点
     */
    @ExcelProperty("端点")
    private String endpoint;

    /**
     * gemini模型参数:geminiProject地址
     */
    @ExcelProperty("geminiLocation")
    private String geminiLocation;
    /**
     * gemini模型参数:谷歌开发的一系列下一代生成式人工智能模型
     */
    @ExcelProperty("geminiProject")
    private String geminiProject;
    /**
     * azure模型参数: 发布名称
     */
    @ExcelProperty("azureDeploymentName")
    private String azureDeploymentName;
    /**
     * 图片大小
     */
    @ExcelProperty("图片大小")
    private String imageSize;
    /**
     * 图片质量
     */
    @ExcelProperty("图片质量")
    private String imageQuality;
    /**
     * 图片风格
     */
    @ExcelProperty("图片风格")
    private String imageStyle;
    /**
     * 向量维数
     */
    @ExcelProperty("向量维数")
    private Integer dimension;
}
